import { jsSign, jsAgentSign } from '@/api/jssdk'
import { useUserStore } from '@/store/modules/user'

// @ts-ignore
// import wx from 'weixin-js-sdk'
export async function getJsSign() {
  const params = getConfParams()
  if (!params) return //没有登录

  console.log('userAgent:' + navigator.userAgent)
  if (/wxwork/i.test(navigator.userAgent)) {
    wxConfig(params)
  } else {
    wxAgentConfig(params)
  }
}

/*
 * 判断是否企业微信浏览器
 * params {url, corpId}
 **/
export function wxConfig(params: any) {
  jsSign(params).then((res: any) => {
    //获取签名
    // @ts-ignore
    window.wx.config({
      beta: true, // 必须这么写，否则wx.invoke调用形式的jsapi会有问题
      debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来，若要查看传入的参数，可以在pc端打开，参数信息会通过log打出，仅在pc端时才会打印。
      appId: res.appId, // 必填，企业微信的corpID
      timestamp: res.timestamp, // 必填，生成签名的时间戳
      nonceStr: res.nonceStr, // 必填，生成签名的随机串
      signature: res.signature, // 必填，签名，见 附录-JS-SDK使用权限签名算法
      jsApiList: [
        'openUserProfile',
        'selectEnterpriseContact',
        'chooseImage',
        'scanQRCode',
        'shareWechatMessage',
      ], // 必填，需要使用的JS接口列表，凡是要调用的接口都需要传进来
    })
  })

  // @ts-ignore
  wx.ready(function () {
    wxAgentConfig(params)
    // @ts-ignore
    wx.checkJsApi({
      jsApiList: [
        'selectEnterpriseContact',
        'selectExternalContact',
        'chooseImage',
        'scanQRCode',
        'shareWechatMessage',
        'openEnterpriseChat',
        'sendChatMessage',
      ], // 需要检测的JS接口列表，所有JS接口列表见附录2,
      success: function (res: any) {
        console.log(res)
        // 以键值对的形式返回，可用的api值true，不可用为false
        // 如：{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"}
      },
    })
    // alert("ready.config成功")
    // config信息验证后会执行ready方法，所有接口调用都必须在config接口获得结果之后，config是一个客户端的异步操作，所以如果需要在页面加载时就调用相关接口，则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口，则可以直接调用，不需要放在ready函数中。
  })

  // @ts-ignore
  wx.error(function (res: any) {
    console.log('wx.error', res)
    // alert(  JSON.stringify(res)  )
    // config信息验证失败会执行error函数，如签名过期导致验证失败，具体错误信息可以打开config的debug模式查看，也可以在返回的res参数中查看，对于SPA可以在这里更新签名。
  })
}

/*
 * 判断是否企业微信浏览器
 * params {url, corpId}
 **/
export function wxAgentConfig(params: any) {
  jsAgentSign(params).then((res: any) => {
    // @ts-ignore
    wx.agentConfig({
      corpid: res.corpid, // 必填，企业微信的corpid，必须与当前登录的企业一致
      agentid: res.agentid, // 必填，企业微信的应用id （e.g. 1000247）
      timestamp: res.timestamp, // 必填，生成签名的时间戳
      nonceStr: res.nonceStr, // 必填，生成签名的随机串
      signature: res.signature, // 必填，签名，见附录-JS-SDK使用权限签名算法
      jsApiList: [
        'selectExternalContact',
        'thirdPartyOpenPage',
        'openEnterpriseChat',
        'sendChatMessage',
      ], //必填，传入需要使用的接口名称
      success: function (res: any) {
        // 回调
        console.log(res)
      },
      fail: function (res: any) {
        if (res.errMsg.indexOf('function not exist') > -1) {
          alert('版本过低请升级')
        }
      },
    })
  })
}

/*
 * 判断是否企业微信浏览器
 **/
export function getConfParams() {
  const userStore = useUserStore()
  const { token, corpId } = userStore
  if (!token) return false

  const url = window.location.href.split('#')[0]
  return { url, corpId }
}
